# 第二章：深度学习通用流程之代码2-2和2-3
import os # 导入os库用于设置环境变量
import locale # 用于设置系统区域环境
import torch # 导入PyTorch库
import certifi#  # 用于解决SSL证书问题
# import torchtext.utils.extract_archive as extract_archive # 用于解压缩文件,在0.9.0以上版本的torchtext中,extract_archive 函数已被移除
from torchvision.datasets.utils import extract_archive # 用于解压缩文件
from torchtext.utils import unicode_csv_reader # 用于读取CSV文件 如果没有安装torchtext包 需要pip install torchtext
# 实验数据目录在.\\Pytorch与深度学习实战\\code\\第二章\\data\\kaggle_cat_or_dog

# 设置系统区域环境
os.environ['PYTHONIOENCODING'] = 'utf-8'
os.environ['LC_ALL'] = 'zh_CN.UTF-8' # 设置中文环境，以便解决中文路径问题。
os.environ['SSL_CERT_FILE'] = certifi.where()# 解决SSL证书问题
# 应用设置
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')

def load_data(file_path,to_path):
    """
    加载数据文件并解压缩
    :param file_path: 数据文件路径
    :param to_path: 解压缩目标路径
    """
    if not os.path.exists(to_path):
        os.makedirs(to_path)
    extract_archive(file_path, to_path)

def read_csv(file_path):
    """
    读取CSV文件
    :param file_path: CSV文件路径
    :return: 读取的内容
    """
    # with io.open(file_path, 'r', encoding='utf-8') as f:
    #     reader(unicode_csv_reader(f))
    with open(file_path, 'r', encoding='utf-8') as f:
        return list(unicode_csv_reader(f))

def main(file_path1,to_path,file_path2):
    """
    主函数，执行数据加载和CSV读取
    :param file_path1: 数据文件路径 
    :param to_path: 解压缩目标路径
    :param file_path2: CSV文件路径
    """

    try:
        load_data(file_path1,to_path)
        print(f"数据文件已解压到: {to_path}")
    except Exception as e:
        print(f"解压数据文件失败: {e}")
    try:
        data = read_csv(file_path2)
        print(f"CSV文件内容: {data[:5]}")  # 打印前5行内容
    except Exception as e:
        print(f"读取CSV文件失败: {e}")

if __name__ == "__main__":
    file_path1 = os.path.expanduser('.\\Desktop\\Pytorch与深度学习实战\\code\\第二章\\tmp\\kaggle_cat_or_dog.zip')
    to_path = os.path.expanduser('.\\Desktop\\Pytorch与深度学习实战\\code\\第二章\\data\\kaggle_cat_or_dog')
    file_path2 = os.path.expanduser('.\\Desktop\\Pytorch与深度学习实战\\code\\第二章\\data\\kaggle_cat_or_dog\\sampleSubmission.csv')
    main(file_path1,to_path,file_path2)